home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD Concept 6
/
CD Concept 06.iso
/
mac
/
UTILITAIRE
/
RLaB
/
rlib
/
printmat.r
< prev
next >
Wrap
Text File
|
1994-09-23
|
3KB
|
133 lines
//--------------------------------------------------------------------------------
// printmat
// Synopsis: Print a matrix with title and labels.
// Syntax: printmat(a,anme,rlab,clab);
// Description:
// This routine prints the matrix a using the title contained in the
// string name and the row labels contained in rowlab and the
// column labels contained in collab. Note: rowlab and collab are
// vectors of strings, such as
//
// rowlab[1]="alpha";
// rowlab[2]="beta";
// rowlab[3]="gamma";
//
// Note: name, rowlab, and collab are optional variables.
//
//--------------------------------------------------------------------------------
printmat = function (a, mname, rowlab, collab, fn)
{
narg=0;
if (!exist (a)) { error ("printmat: must supply a matrix"); }
if (!exist (mname)) { mname = ""; }
if (!exist (rowlab)) { rl = []; else rl = rowlab; }
if (!exist (collab)) { cl = []; else cl = collab; }
if (!exist (fn)) { fn = "stdout"; }
nrows=a.nr;
ncols=a.nc;
// Create row and column labels if necessary
if (rl.n == 0)
{
for (i in 1:nrows)
{
sprintf (tmp, "%3i", i);
rl[i]="--"+ tmp +" --> ";
}
}
if (cl.n == 0)
{
for (i in 1:ncols) { cl[i]="----"+int2str(i)+"---- "; }
}
col_per_scrn=5;
len=12;
if ((nrows==0)||(ncols==0))
{
if (length (mname))
{
fprintf(fn," \n%s = \n \n",mname);
return 0;
}
fprintf(fn," \n%s \n"," [] \n");
return 0;
}
// Print matrix name
col=1;
n = min([col_per_scrn-1,ncols-1]);
if (length (mname))
{
fprintf(fn,"\n%s = \n \n",mname);
}
// Print column labels
s="";
icol=0;
while (col <= ncols)
{
icol=icol+1;
s=" ";
for (j in 0:n)
{
ishift=12-length(cl[j+col]);
for (k in 1:ishift)
{
s=s+" ";
}
s=s+cl[j+col];
}
fprintf(fn,"%s\n",s);
// Print Row Labels
for (i in 1:nrows)
{
s=""+rl[i];
ishift=12-length(rl[i]);
for (k in 1:ishift)
{
s=s+" ";
}
for (j in 0:n)
{
element = a[i;col+j];
if (element == 0) {
s=s+" 0";
else if (element >= 1.0e+06) {
sdum="";
sprintf(sdum,"%12.5e",element);
s=s+sdum;
else if (element <= -1.0e+05) {
sdum="";
sprintf(sdum,"%12.5e",element);
s=s+sdum;
else if (abs(element) < 0.0001) {
sdum="";
sprintf(sdum,"%12.5e",element);
s=s+sdum;
else
sdum="";
sprintf(sdum,"%12.5f",element);
s=s+sdum;
} } } }
}
fprintf(fn,"%s\n",s);
}
col = col+col_per_scrn;
fprintf(fn,"%s"," \n");
if ((ncols-col) < n)
{
n=ncols-col;
}
}
return 0;
};